import {reqGetCode, reqUserRegister, reqUserLogin, reqUserInfo, reqLogout} from "@/api"
import {getToken, setToken, removeToken} from '@/utils/token'

// Register 和 Login 模块的小仓库
export default ({
    // 仓库存储数据的地方
    state: {
        code: '',
        token: getToken(),
        userInfo: {}
    },
    // 唯一修改state的地方
    mutations: {
        GETCODE(state, code) {
            state.code = code;
        },
        USERLOGIN(state, token) {
            state.token = token;
        },
        GETUSERINFO(state, userInfo) {
            state.userInfo = userInfo;
        },
        // 清除本地数据
        CLEAR(state) {
            // 帮仓库中相关用户信息清空
            state.token = '';
            state.userInfo = {};
            // 本地存储数据清空
            removeToken();
        }
    },
    // 可以书写业务逻辑 也可以处理异步
    actions: {
        // 获取验证码
        async getCode({commit}, phone) {
            let result = await reqGetCode(phone);
            // console.log(result);
            if(result.code == 200) {
                commit("GETCODE", result.data);
                return 'ok';
            }else {
                return Promise.reject(new Error('faile'));
            }
        },
        // 用户注册
        async userRegister({commit}, user) {
            let result = await reqUserRegister(user);
            // console.log(result);
            if(result.code == 200) {
                return 'ok';
            }else {
                return Promise.reject(new Error('faile'));
            }
        },
        // 用户登录
        async userLogin({commit}, data) {
            let result = await reqUserLogin(data);
            // console.log(result);
            // 服务器下发的token 用户唯一标识符(uuid)
            // 将来经常通过带token找服务器要用户信息进行展示
            if(result.code == 200) {
                // 登陆成功且获取到token
                commit("USERLOGIN", result.data.token);
                // 持久化存储token
                setToken(result.data.token);
                return 'ok';
            }else {
                return Promise.reject(new Error('faile'));
            }
        },
        // 获取用户信息
        async getUserInfo({commit}) {
            let result = await reqUserInfo();
            // console.log(result);
            if(result.code == 200) {
                // 提交用户信息
                commit("GETUSERINFO", result.data);
                return 'ok';
            }else {
                return Promise.reject(new Error('faile'));
            }
        },
        // 退出登录
        async userLogout({commit}) {
            // 只向服务器发起一次请求 通知服务器清除token
            let result = await reqLogout();
            // console.log(result);
            // action里面不能操作state 提交mutation修改state
            if(result.code == 200) {
                commit("CLEAR");
                return 'ok';
            }else {
                return Promise.reject(new Error('faile'));
            }
        }
    },
    // 简化数据
    getters: {
    }
})